home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr05 / xnot12a.zip / MODES.C < prev    next >
C/C++ Source or Header  |  1993-05-20  |  4KB  |  167 lines

  1. #include "jam.h"
  2. /*
  3.  * Commands to toggle modes. Without an argument, toggle mode.
  4.  * Negitive or zero argument, mode off.     Positive argument, mode on.
  5.  */
  6.  
  7. #include "def.h"
  8. #include "kbd.h"
  9. #include "keyname.h"
  10.  
  11. #define MAIN        0   /* fundamental */
  12. #define FILL        1
  13. #define INDENT      2
  14. #define C           3
  15. #define BLINK       C
  16.  
  17. #define OVERWRITE   4
  18. #define ESC_PREFIX  5
  19. #define CX_PREFIX   6
  20. #define CX4_PREFIX  7
  21. #define HELPM       8
  22. #define DIRED       9
  23. #define BUFFLIST    10
  24.  
  25. static int rn_(changemode,(int f, int n, char *mode));
  26. static char *toomanymodes = "Too many modes";
  27. static char *cantfind  = "Can't find mode %s";
  28.  
  29. int defb_nmodes = 0;
  30. MAPS *defb_modes[PBMODES] = {&map_table[0]};
  31. int defb_flag = 0;
  32.  
  33. static int changemode(f, n, mode)
  34. int f, n;
  35. char *mode;
  36. {
  37.     register int i;
  38.     MAPS *m;
  39.  
  40.     if((m = name_mode(mode)) == NULL) {
  41.     ewprintf(cantfind, mode);
  42.     return FALSE;
  43.     }
  44.     if(!(f & FFARG)) {
  45.     for(i=0; i <= curbp->b_nmodes; i++)
  46.         if(curbp->b_modes[i] == m) {
  47.         n = 0;            /* mode already set */
  48.         break;
  49.         }
  50.     }
  51.     if(n > 0) {
  52.     for(i=0; i <= curbp->b_nmodes; i++)
  53.       if(curbp->b_modes[i] == m) 
  54.             return TRUE;    /* mode already set */
  55.     if(curbp->b_nmodes >= PBMODES-1) {
  56.         ewprintf(toomanymodes);
  57.         return FALSE;
  58.     }
  59.     curbp->b_modes[++(curbp->b_nmodes)] = m;
  60.     } else {
  61.     /* fundamental is b_modes[0] and can't be unset 
  62.         */
  63.     for(i=1; i <= curbp->b_nmodes && m != curbp->b_modes[i]; i++) {}
  64.     if(i > curbp->b_nmodes) 
  65.         return TRUE;        /* mode wasn't set */
  66.     for(; i < curbp->b_nmodes; i++)
  67.         curbp->b_modes[i] = curbp->b_modes[i+1];
  68.     curbp->b_nmodes--;
  69.     }
  70.     return TRUE;
  71. }
  72.  
  73. indentmode(f, n)
  74. int f, n;
  75. {
  76.     return changemode(f, n, map_table[INDENT].p_name);
  77. }
  78.  
  79. fillmode(f, n)
  80. int f, n;
  81. {
  82.     return changemode(f, n, map_table[FILL].p_name);
  83. }
  84.  
  85. /*
  86.  * Fake the GNU "blink-matching-paren" variable.
  87.  */
  88. blinkparen(f, n)
  89. int f, n;
  90. {
  91.     return changemode(f, n, map_table[BLINK].p_name);
  92. }
  93.  
  94. #ifdef    NOTAB
  95. notabmode(f, n)
  96. int f, n;
  97. {
  98.     if(changemode(f, n, map_table[NOTAB].p_name) == FALSE) 
  99.     return FALSE;
  100.     if(f & FFARG) {
  101.     if(n <= 0) curbp->b_flag &= ~BFNOTAB;
  102.     else curbp->b_flag |= BFNOTAB;
  103.     } else curbp->b_flag ^= BFNOTAB;
  104.     return TRUE;
  105. }
  106. #endif
  107.  
  108. myoverwrite(f, n)
  109. int f, n;
  110. {
  111.     if(changemode(f, n, map_table[OVERWRITE].p_name) == FALSE) 
  112.     return FALSE;
  113.     if(f & FFARG) {
  114.     if(n <= 0) curbp->b_flag &= ~BFOVERWRITE;
  115.     else curbp->b_flag |= BFOVERWRITE;
  116.     } else curbp->b_flag ^= BFOVERWRITE;
  117.     return TRUE;
  118. }
  119.  
  120. set_default_mode(f, n)
  121. int f, n;
  122. {
  123.     register int i;
  124.     register MAPS *m;
  125.     char mode[32];
  126.  
  127.     if(eread("Set Default Mode: ", mode, 32, EFNEW) != TRUE)
  128.         return ABORT;
  129.     if((m = name_mode(mode)) == NULL) {
  130.         ewprintf(cantfind, mode);
  131.     return FALSE;
  132.     }
  133.     if(!(f & FFARG)) {
  134.     for(i=0; i <= defb_nmodes; i++)
  135.         if(defb_modes[i] == m) {
  136.         n = 0;            /* mode already set */
  137.         break;
  138.         }
  139.     }
  140.     if(n > 0) {
  141.     for(i=0; i <= defb_nmodes; i++)
  142.         if(defb_modes[i] == m) return TRUE;    /* mode already set */
  143.     if(defb_nmodes >= PBMODES-1) {
  144.         ewprintf(toomanymodes);
  145.         return FALSE;
  146.     }
  147.     defb_modes[++defb_nmodes] = m;
  148.     } else {
  149.     /* fundamental is defb_modes[0] and can't be unset */
  150.     for(i=0; i <= defb_nmodes && m != defb_modes[i]; i++) {}
  151.     if(i > defb_nmodes) 
  152.         return TRUE;        /* mode wasn't set */
  153.     for(; i < defb_nmodes; i++)
  154.         defb_modes[i] = defb_modes[i+1];
  155.     defb_nmodes--;
  156.     }
  157.     if(strcmp(mode, map_table[OVERWRITE].p_name)==0)
  158.         if(n<=0) defb_flag &= ~BFOVERWRITE;
  159.     else defb_flag |= BFOVERWRITE;
  160. #ifdef NOTAB
  161.     if(strcmp(mode, map_table[NOTAB].p_name)==0)
  162.         if(n<=0) defb_flag &= ~BFNOTAB;
  163.     else defb_flag |= BFNOTAB;
  164. #endif
  165.     return TRUE;
  166. }
  167.